package org.Yiran.timetale_re.event;

import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import org.Yiran.timetale_re.util.cooldown.ClientCooldownManager;

/**
 * 客户端事件处理器类
 * <p>
 * 该类负责处理客户端相关的事件，包括：
 * 1. 客户端首次tick时加载冷却数据
 * 2. 玩家退出游戏时保存冷却数据
 * </p>
 */
@Mod.EventBusSubscriber(modid = "timetale_re", bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
public class ClientEventHandler {
    
    // ============================== 实例变量 ==============================
    
    private static boolean hasLoaded = false;  // 标记是否已加载冷却数据

    // ============================== 客户端Tick事件处理 ==============================
    
    /**
     * 客户端Tick事件处理方法
     * <p>
     * 在客户端第一次tick结束时加载冷却数据
     * </p>
     * 
     * @param event 客户端tick事件
     */
    @SubscribeEvent
    public static void onClientTick(TickEvent.ClientTickEvent event) {
        // 在客户端第一次tick时加载冷却数据
        if (!hasLoaded && event.phase == TickEvent.Phase.END) {
            ClientCooldownManager.loadCooldownData();
            hasLoaded = true;
        }
    }

    // ============================== 玩家登出事件处理 ==============================
    
    /**
     * 玩家登出事件处理方法
     * <p>
     * 当玩家退出游戏时保存冷却数据
     * </p>
     * 
     * @param event 玩家登出事件
     */
    @SubscribeEvent
    public static void onPlayerLoggedOut(PlayerEvent.PlayerLoggedOutEvent event) {
        // 玩家退出时保存冷却数据
        ClientCooldownManager.saveCooldownData();
    }
}